.NET ExecuteNonQuery()

在正常项目中,注册用户之前需要检查用户名是否已经被占用。由于仅知道ExecuteNonQuery()方法返回被影响的行号,便开始屁颠屁颠的写代码

//连接本地数据库
SqlConnection conn = connectLocaldb.ConnectDataBase();
//打开数据库
conn.Open();
//创建查询语句
SqlCommand querySingleInfo = conn.CreateCommand();
querySingleInfo.CommandText = "SELECT * FROM Member where UserName=" + "'" + username + "'";
int result = querySingleInfo.ExecuteNonQuery();
if(result>0)
{
    /*存在*/
}
else
{
    /*不存在*/
}
//关闭查询
singleInfoReader.Close();
//关闭数据库连接

结果在检测代码的时候发现返回值总是-1,所以任意一个检测样例均显示未被占用。那么问题就来了,ExecuteNonQuery()的返回值是什么?

此时只能看官方文档

Remarks

You can use the ExecuteNonQuery to perform catalog operations (for example, querying the structure of a database or creating database objects such as tables), or to change the data in a database without using a DataSet.aspx) by executing UPDATE, INSERT, or DELETE statements.

Although the ExecuteNonQuery returns no rows, any output parameters or return values mapped to parameters are populated with data.

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command. When a trigger exists on a table being inserted or updated, the return value includes the number of rows affected by both the insert or update operation and the number of rows affected by the trigger or triggers. For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.

可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。
进行填充。对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于所有其他类型的语句,返回值为 -1。如果发生回滚,返回值也为 -1
看完后才明白,原来select语句不适合ExecuteNonQuery()方法,原来是这样,真笨,方法用错了!特意把它记录下来,希望朋友不要犯类似的错误!

 

 

看完这些后会发现,在官方文档中,并没有提及关于Select的任何操作,所以C# ExecuteNonQuery()并不支持Select操作,所以返回值均是-1.

我们可以使用 ExecuteNonQuery 来执行目录操作(例如查询数据库的结构或创建诸如表等的数据库对象),或通过执行 UPDATE、INSERT 或 DELETE 语句,在不使用 DataSet 的情况下更改数据库中的数据。

虽然 ExecuteNonQuery 不返回任何行,但映射到参数的任何输出参数或返回值都会用数据进行填充。

对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1。

 

文章目录
  1. 1. Remarks
|